package com.bjpowerrnode.javase.string;

import java.sql.SQLOutput;

/**
 * String类中常用的方法。
 */
public class StringTest05 {
    public static void main(String[] args) {
        //String 类中常用的方法

        //1(掌握)、charAt(int index);返回指定索引处的char值。
        char c = "中国人".charAt(1);//双引号括起来的是String对象，对象就可以调用方法。
        System.out.println(c);//国

        //2(了解)、compareTo(String anotherString);按字典顺序比较两个字符串。
        int result = "abc".compareTo("abc");
        System.out.println(result);//0,一样大
        int result2 = "abcd".compareTo("abce");
        System.out.println(result2);//-1，前小后大
        int result3 = "afce".compareTo("abcd");
        System.out.println(result3);//1，前大后小

        //3、contains(CharSequence s);当且仅当该字符串包含指定的字符序列时返回true。
        System.out.println("HelloWorld.java".contains(".java"));
        System.out.println("HelloWorld.java".contains("world"));

        //4、endsWith(String suffix);测试这个字符串是否以指定的后缀结束。
        System.out.println("test.txt".endsWith(".java"));
        System.out.println("test.txt".endsWith(".txt"));

        //5、equals(Object anObject);将此字符串与指定的对象进行比较。
        //比较两个字符串必须使用equals()方法，不能使用双等号。
        //equals()方法有没有调用compareTo()方法？JDK13新版本没有
        System.out.println("abc".equals("abc"));

        //6、equalsIgnoreCase(String anotherString);将此字符串与另一个字符串进行比较，忽略大小写。
        System.out.println("aBcDeF".equalsIgnoreCase("ABCDEF"));

        //7、getBytes();
        //使用平台的默认字符集将此字符串编码为字节序列，并将结果存储到新的字节数组中。
        byte[] bytes = "abcdef".getBytes();
        for(int i = 0; i<bytes.length; i++){
            System.out.println(bytes[i]);
        }
        //8、indexOf(int ch);
        //返回指定字符在该字符串第一次出现的位置的索引。
        System.out.println("sunxueteng".indexOf("xue"));

        //9、isEmpty();
        //当且仅当length()为0时返回true。
        System.out.println("abc".isEmpty());
        System.out.println(" ".isEmpty());//false
        System.out.println("".isEmpty());//true

        //10.length();
        //返回字符串的长度；
        System.out.println("adb".length());
        //面试题：判断数组长度和判断字符串长度不一样
        //判断数组长度是length()方法，判断数组长度是length属性。

        //11、lastIndexOf(int ch)
        //返回指定字符在该字符串最后一次出现的位置的索引。
        System.out.println("sunxuetenglovesunxueteng'sliangjingwen".lastIndexOf("sun"));

        //12、replace(CharSequence target, CharSequence replacement);
        //String的父接口就是CharSequence
       String newString =  "http://www.baidu.com".replace("http://","https://");
        System.out.println(newString);
        //把以下字符串中的等号替换成冒号
       String newString1 =  "name=zhangsna&password=123&age=30".replace("=",":");
       System.out.println(newString1);

       //13、split(String regex);
       String[] s7 = "1996-8-9".split("-");
        for (int i = 0; i < s7.length; i++) {
            System.out.println(s7[i]);
        }

        //14、startsWith(String prefix)
        //判断此字符串是否以指定的前缀开始。
        System.out.println("sunxueteng".startsWith("sun"));

        //15、substring(int beginIndex);
        //返回一个字符串，该字符串是该字符串的子字符串。
        System.out.println("sunxueteng".substring(3));//xueteng

        //16、substring(int beginIndex, int endIndex);左闭右开
        System.out.println("sunxueteng".substring(3,10));

        //17、toCharArray()
        //将此字符串转换为一个新的字符数组。
        char[] chars = "我是中国人".toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }

        //18、toLowerCase();
        //使用默认区域设置的规则将此字符串中的所有字符转换为小写。
        System.out.println("ABC".toLowerCase());

        //19、toUpperCase()
        //使用默认区域设置的规则将此字符串中的所有字符转换为大写字母。
        System.out.println("abcdef".toUpperCase());

        //20、trim()
        //去除字符串前后的空白
        System.out.println("    hello  world !   ");//hello  world !

        //21、String中只有一个方法是静态的，不需要new对象:valueOf(boolean b);
        //返回布尔参数的字符串表示形式。将非字符串“转换成字符串”
        boolean 孙学腾 = true;
        System.out.println(孙学腾);//true


        String s1 = String.valueOf(孙学腾);
        System.out.println(s1);//true

        //这个静态的valueOf()方法，参数是一个对象的时候，会自动调用该对象的toString()方法吗？
        String s2 = String.valueOf(new Customer());
        System.out.println(s2);//com.bjpowerrnode.javase.string.Customer@10f87f48
        System.out.println(s2);//Customer类重写toString()方法后输出："我是一个VIP客户"

        //研究一下println的源代码
        //通过源代码可以看出为什么输出一个引用的时候，会调用toString()方法。
        //总结展现在控制台上的东西都是字符串。本质上System.out.println()这个方法在输出任何东西的时候都会转换成字符串。
        System.out.println(100);
        System.out.println("abc");
    }
}

class Customer{
    //重写

    @Override
    public String toString() {
        return "我是一个VIP客户";
    }
}